package leetcode.hot100;

/**
 * leetcode-hot100: 环形链表
 * 测试链接: https://leetcode.cn/problems/linked-list-cycle/?envType=study-plan-v2&envId=top-100-liked
 *
 * 给你一个链表的头节点head，判断链表中是否有环
 */
public class LinkedListCycle {

    public boolean hasCycle(ListNode head) {
        if(head==null || head.next==null || head.next.next==null){
            return false;
        }
        //定义快慢指针
        ListNode fast = head.next.next;
        ListNode slow = head.next;
        //让快指针第一次追上慢指针
        //想象兔子和乌龟在同一跑道上，一个速度快另一个速度慢，如果跑道有环，兔子必然在一段时间后追上乌龟
        while(fast != slow){
            if(fast.next==null || fast.next.next == null){
                return false;
            }
            fast = fast.next.next;
            slow = slow.next;
        }
        return true;
    }
}
